// js 主进程是单线程的
setTimeout(()=>{
  console.log(1)
  Promise.resolve().then(()=>{
    console.log(2)
  })
})

Promise.resolve().then(()=>{
  console.log(3)
  setTimeout(()=>{
    console.log(4)
  })
})
// 3124
// 微任务  setTimeout
// 宏任务  执行完一个宏任务 就会清空微任务
// 微任务会先执行  

// vue nextTick
// 微任务 then MutationObserver 
// 宏任务 setImmediate setTimeout MessageChannel

// 为什么js是单线程
// 主要是保证dom的一致性

// 如何提高加载速度
// script 的 defer保证顺序 和 async
// prefetch(预加载不会马上加载 空闲的时候  dns预解析) preload(先加载资源) 

